//处理业务逻辑看 读取数据返回给浏览器
// 处理业务逻辑的中间件,读取某个json文件的数据
const path = require('path')
const fileUtils = require('../utils/file_utils')
module.exports = async (ctx, next) => {
  // 根据url

  // 从ctx.request.url获取到/api/seller  要转为   ../data/seller.json
  // ctx.request.href是获取protocol，host 和 url
  const url = ctx.request.url
  let filePath = url.replace('/api', '') //  /seller
  filePath = '../data' + filePath + '.json'  // ../data/seller.json
  filePath = path.join(__dirname, filePath)
  try {
    // 因为这个函数getFileJsonData返回的是promise对象 所以我们要用await的语法糖
    // 这个函数前面加上await之后就可以直接得到的是promise对象返回的值而不是promise对象本身了
    // 这是await 和 async 的语法糖  加await得到的是promise对象的返回值而不是promise对象本身

    // 语法糖 读取文件成功就继续执行下去 读取成功的情况下读取到的内容也就返回给ret了
    const ret = await fileUtils.getFileJsonData(filePath)
    // 这种一般都要放在try catch中
    ctx.response.body = ret
  } catch (error) {
    // 读取文件失败的情况下就进而执行catch里面的内容
    const errorMsg = {
      message: '读取文件内容失败, 文件资源不存在',
      status: 404
    }
    ctx.response.body = JSON.stringify(errorMsg)
  }

  console.log(filePath)
  await next()
}